/**
 * @addtogroup jtc_msg_808
 * jtc_msg_808_2013
 * @{
 */
 /**
 * @file         jtc_msg_808_2013.h
 * @brief        交通部消息2013版本
 * @note    
 * @author       Akee
 * @date         2019-11-4
 * @version      1.0
 *
 * @par          修改日志
 * <table>
 * <tr><th>Date        <th>Version               <th>Author          <th>Description
 * <tr><td>2019-11-4   <td>1.0                   <td>Akee            <td>创建初始版本
 * @copyright    杭州鸿泉物联网技术股份有限公司
 */
#ifndef _JTC_MSG_808_2013_H_
#define _JTC_MSG_808_2013_H_
#include "jtmsg808/jtc_msg_808.h"
#include "ofc/ofc_indefine_list.h"
#include "mfc/mfc_string.h"
#include "jtmsg808/jtc_msg_808_2013_comm.h"
#ifdef __cplusplus
extern "C" {
#endif

/**
 * 终端通用应答(0x0001)
 ******************************************************************************
 */
typedef struct TJtMsg808TrmGenRespTag TJtMsg808TrmGenResp;
struct TJtMsg808TrmGenRespTag
{
    TJtMsg808 parent_;                ///< 基类
    
PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Word resp_seq_id;                 ///< 应答流水号 | 对应的平台消息的流水号
    Word resp_msg_id;                 ///< 应答id | 对应的平台消息的id
    Byte resp_result;                 ///< 应答结果 | 0：成功/确认；1：失败；2：消息有误；3：不支持； 参考TJtMsg808GenRespResultEnum

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808TrmGenRespCreate(TJtMsg808TrmGenResp *self);

/**
 * 制造TJtMsg808TrmGenResp消息,内部会调用构造函数,指针通过TJtMsg808FreeMsg释放
 * @param resp_seq_id: 应答流水号 | 对应的平台消息的流水号
 * @param resp_msg_id: 应答id | 对应的平台消息的id
 * @param resp_result: 应答结果 | 0：成功/确认；1：失败；2：消息有误；3：不支持
 * @return 消息指针,需要通过OfFreeObject释放
 */
TJtMsg808TrmGenResp *JtMakeMsg808TrmGenResp(Word resp_seq_id, Word resp_msg_id, Byte resp_result);

/**
 * 平台通用应答(0x8001)
 ******************************************************************************
 */
typedef struct TJtMsg808PtmGenRespTag TJtMsg808PtmGenResp;
struct TJtMsg808PtmGenRespTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件

PUBLIC
    Word resp_seq_id;                 ///< 应答流水号 | 对应的终端消息的流水号
    Word resp_msg_id;                 ///< 应答id | 对应的终端消息的id
    Byte resp_result;                 ///< 结果 | 0：成功/确认；1：失败；2：消息有误；3：不支持；4：报警处理确认(系统平台手工确认报警)； 参考TJtMsg808GenRespResultEnum

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808PtmGenRespCreate(TJtMsg808PtmGenResp *self);

/**
 * 补传分包请求(0x8003)
 ******************************************************************************
 */
typedef struct TJtMsg808RequestPkgPartTag TJtMsg808RequestPkgPart;
struct TJtMsg808RequestPkgPartTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Word ori_seq_id;                  ///< 原始消息流水号 | 对应要求补传的原始消息第一包的消息流水号
    Byte part_count;                  ///< 重传包总数 | n
    Word parts[256];                  ///< 重传包id 列表 | 重传包序号顺序排列，如"包ID1 包ID2......包IDn"

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808RequestPkgPartCreate(TJtMsg808RequestPkgPart *self);

/**
 * 制造TJtMsg808RequestPkgPart消息,内部会调用构造函数,指针通过TJtMsg808FreeMsg释放
 * @param 
 * @return 消息指针,需要通过OfFreeObject释放
 */
TJtMsg808RequestPkgPart *JtMakeMsg808RequestPkgPart(Word ori_seq_id, const Word *parts, Byte part_count);

/**
 * 终端心跳(0x0002)
 ******************************************************************************
 */
typedef struct TJtMsg808TrmBeatTag TJtMsg808TrmBeat;
struct TJtMsg808TrmBeatTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808TrmBeatCreate(TJtMsg808TrmBeat *self);

/**
 * 制造TJtMsg808TrmBeat消息,内部会调用构造函数,指针通过TJtMsg808FreeMsg释放
 * @return 消息指针,需要通过OfFreeObject释放
 */
TJtMsg808TrmBeat *JtMakeMsg808TrmBeat(void);

/**
 * 终端注册(0x0100)
 ******************************************************************************
 */
typedef struct TJtMsg808TrmRegisterTag TJtMsg808TrmRegister;
struct TJtMsg808TrmRegisterTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Word province_id;                   ///< 省域id | 标示终端安装车辆所在的省域，0保留，由平台取默认值。省域id采用GB/T 2260中规定的行政区划代码六位中前两位
    Word city_id;                       ///< 市县域id | 标示终端安装车辆所在的市域和县域，0保留，由平台取默认值。市县域id采用GB/T 2260中规定的行政区划代码六位中后四位
    Byte manufacture_id[5];             ///< 制造商id | 五个字节，终端制造商编码
    Byte model[20];                     ///< 终端型号 | 二十个字节，此终端型号由制造商自行定义，位数不足时，后补"0X00"。
    Byte trm_id[7];                     ///< 终端id | 七个字节，由大写字母和数字组成，此终端id由制造商自行定义，位数不足时，后补"0X00"。
    Byte vehicle_color;                 ///< 车牌颜色 | 车牌颜色，按照JT/T415-2006的5.4.12，未上牌时，取值为0。
    TMfString vehicle_no;               ///< 车牌 | 车牌颜色为0 时，表示车辆VIN；否则，表示公安交通管理部门颁发的机动车号牌

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808TrmRegisterCreate(TJtMsg808TrmRegister *self);

/**
 * 终端注册应答(0x8100)
 ******************************************************************************
 */
typedef struct TJtMsg808TrmRegisterRespTag TJtMsg808TrmRegisterResp;
struct TJtMsg808TrmRegisterRespTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Word resp_seq_id;                  ///< 应答流水号 | 对应的终端注册消息的流水号
    Byte resp_result;                  ///< 结果 | 0：成功；1：车辆已被注册；2：数据库中无该车辆；3：终端已被注册；4：数据库中无该终端；参考TJtMsg808GenRespResultEnum
    TMfString auth_code;               ///< 鉴权码 | 只有在成功后才有该字段
PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808TrmRegisterRespCreate(TJtMsg808TrmRegisterResp *self);

/**
 * 终端注销(0x0003)
 ******************************************************************************
 */
typedef struct TJtMsg808TrmLogoutTag TJtMsg808TrmLogout;
struct TJtMsg808TrmLogoutTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    
PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808TrmLogoutCreate(TJtMsg808TrmLogout *self);

/**
 * 制造TJtMsg808TrmLogout消息,内部会调用构造函数,指针通过TJtMsg808FreeMsg释放
 * @return 消息指针,需要通过OfFreeObject释放
 */
TJtMsg808TrmLogout *JtMakeMsg808TrmLogout(void);

/**
 * 终端鉴权(0x0102)
 ******************************************************************************
 */
typedef struct TJtMsg808TrmAuthTag TJtMsg808TrmAuth;
struct TJtMsg808TrmAuthTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    TMfString auth_code;              ///< 鉴权码 | 终端重连后上报鉴权码

PRIVATE
    
};

/**
 * 制造TJtMsg808TrmAuth消息,内部会调用构造函数,指针通过TJtMsg808FreeMsg释放
 * @param auth_code: 鉴权码
 * @param auth_code_len: 鉴权码长度
 * @return 消息指针,需要通过OfFreeObject释放
 */
TJtMsg808TrmAuth *JtMakeMsg808TrmAuth(const char *auth_code, Int32 auth_code_len);

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808TrmAuthCreate(TJtMsg808TrmAuth *self);

/**
 * 设置参数(0x8103)
 ******************************************************************************
 */
typedef struct TJtMsg808SetParamsTag TJtMsg808SetParams;
struct TJtMsg808SetParamsTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件

PUBLIC
    Byte param_count;                 ///< 参数个数
    TMfString data;                   ///< 数据内容

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808SetParamsCreate(TJtMsg808SetParams *self);

/**
 * 查询终端参数(0x8104)
 ******************************************************************************
 */
typedef struct TJtMsg808GetParamTag TJtMsg808GetParam;
struct TJtMsg808GetParamTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC

PRIVATE
    Bool param_valid_;                ///< 参数是否有效,兼容EC2
    DWord param_id_;                  ///< 参数id
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808GetParamCreate(TJtMsg808GetParam *self);

/**
* 获取参数Id
* @param self: 对象指针
* @param id: 有效的Id,当返回值有效时，id才有效
* @return True: 有效; False: 无效
*/
Bool TJtMsg808GetParamGetParamId(TJtMsg808GetParam *self, DWord *id);

/**
* 设置参数Id
* @param self: 对象指针
* @param id: 参数Id
* @return 
*/
void TJtMsg808GetParamSetParamId(TJtMsg808GetParam *self, DWord id);


/**
 * 查询终端参数(0x0104)
 ******************************************************************************
 */
typedef struct TJtMsg808GetParamRespTag TJtMsg808GetParamResp;
struct TJtMsg808GetParamRespTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC

PRIVATE
    Word resp_seq_id;                ///< 参数是否有效,兼容EC2
    Byte param_count;                ///< 参数个数
    TMfString param;
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808GetParamRespCreate(TJtMsg808GetParamResp *self);



/**
 * 终端控制(0x8105)
 ******************************************************************************
 */
typedef struct TJtMsg808TrmCtrlTag TJtMsg808TrmCtrl;
struct TJtMsg808TrmCtrlTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte cmd;                         ///< 命令字 | 终端控制命令字说明见表8-15
    TMfString param;                  ///< 命令参数 | 命令参数格式具体见后面描述，每个字段之间采用半角分号<;>分隔，每个STRING字段先按GBK编码处理后再组成消息

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808TrmCtrlCreate(TJtMsg808TrmCtrl *self);

/**
 * 查询指定终端参数(0x8106)
 ******************************************************************************
 */
typedef struct TJtMsg808GetParamsTag TJtMsg808GetParams;
struct TJtMsg808GetParamsTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte param_count;                 ///< 参数总数 | 参数总数为n
    DWord param_ids[256];             ///< 参数id 列表 | 参数顺序排列，如"参数ID1 参数ID2......参数IDn"。

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808GetParamsCreate(TJtMsg808GetParams *self);

/**
 * 查询终端属性(0x8107)
 ******************************************************************************
 */
typedef struct TJtMsg808GetTrmAttrTag TJtMsg808GetTrmAttr;
struct TJtMsg808GetTrmAttrTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    
PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808GetTrmAttrCreate(TJtMsg808GetTrmAttr *self);

/**
 * 查询终端属性应答(0x0107)
 ******************************************************************************
 */
typedef struct TJtMsg808GetTrmAttrRespTag TJtMsg808GetTrmAttrResp;
struct TJtMsg808GetTrmAttrRespTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
    
PUBLIC
    Word type;                          ///< 终端类型 | bit0，0：不适用客运车辆，1：适用客运车辆；bit1，0：不适用危险品车辆，1：适用危险品车辆；bit2，0：不适用普通货运车辆，1：适用普通货运车辆；bit3，0：不适用出租车辆，1：适用出租车辆；bit6，0：不支持硬盘录像，1：支持硬盘录像；bit7，0：一体机，1：分体机。
    Byte manufacture_id[5];             ///< 制造商id | 五个字节，终端制造商编码
    Byte model[20];                     ///< 终端型号 | 二十个字节，此终端型号由制造商自行定义，位数不足时，后补"0X00"
    Byte trm_id[7];                     ///< 终端id | 七个字节，由大写字母和数字组成，此终端id 由制造商自行定义，位数不足时，后补"0X00"。
    Byte sim_iccid[10];                 ///< 终端SIM 卡ICCID | 终端SIM 卡ICCID 号
    TMfString hw_ver;                   ///< 终端硬件版本号 | 
    TMfString sw_ver;                   ///< 终端固件版本号 | 
    Byte gnss_mod_attr;                 ///< GNSS 模块属性 | bit0，0：不支持GPS 定位， 1：支持GPS 定位；bit1，0：不支持北斗定位， 1：支持北斗定位；bit2，0：不支持GLONASS 定位， 1：支持GLONASS 定位；bit3，0：不支持Galileo 定位， 1：支持Galileo 定位
    Byte gsm_mod_attr;                  ///< 通信模块属性 | bit0，0：不支持GPRS通信， 1：支持GPRS通信；bit1，0：不支持CDMA通信， 1：支持CDMA通信；bit2，0：不支持TD-SCDMA通信， 1：支持TD-SCDMA通信；bit3，0：不支持WCDMA通信， 1：支持WCDMA通信；bit4，0：不支持CDMA2000通信， 1：支持CDMA2000通信。bit5，0：不支持TD-LTE通信， 1：支持TD-LTE通信；bit7，0：不支持其他通信方式， 1：支持其他通信方式

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808GetTrmAttrRespCreate(TJtMsg808GetTrmAttrResp *self);

/**
 * 下发终端升级包(0x8108)
 ******************************************************************************
 */
typedef struct TJtMsg808TrmUpdateTag TJtMsg808TrmUpdate;
struct TJtMsg808TrmUpdateTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte type;                        ///< 升级类型 | 0：终端，12：道路运输证IC 卡读卡器，52：北斗卫星定位模块
    Byte manufacture_id[5];           ///< 制造商id | 制造商编号
    TMfString ver;                    ///< 版本号 | 
    DWord file_size;                  ///< 升级文件总尺寸 | 单位为Byte
    TMfString data;                   ///< 升级数据包 | 

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808TrmUpdateCreate(TJtMsg808TrmUpdate *self);

/**
 * 终端升级结果通知(0x0108)
 ******************************************************************************
 */
typedef struct TJtMsg808TrmUpdateResultTag TJtMsg808TrmUpdateResult;
struct TJtMsg808TrmUpdateResultTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte type;                        ///< 升级类型 | 0：终端，12：道路运输证IC 卡读卡器，52：北斗卫星定位模块
    Byte update_result;               ///< 升级结果 | 0：成功，1：失败，2：取消

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808TrmUpdateResultCreate(TJtMsg808TrmUpdateResult *self);

/**
 * 制造TJtMsg808TrmUpdateResult消息,内部会调用构造函数,指针通过TJtMsg808FreeMsg释放
 * @param 
 * @return 消息指针,需要通过OfFreeObject释放
 */
TJtMsg808TrmUpdateResult *JtMakeMsg808TrmUpdateResult(Byte type, Byte update_result);

/**
 * 使用前锁定(快速开户)消息(0x0110)
 ******************************************************************************
 */
typedef struct TJtMsg808AccountRegisterTag TJtMsg808AccountRegister;
struct TJtMsg808AccountRegisterTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte flag;                        ///< 加密标识 | 0-未加密；1-加密，需要处理加密密钥。
    DWord key;                        ///< 加密密钥 | 加密密钥（终端私钥）（制造商id）
    Byte owner_phone_num[12];         ///< 车主联系手机号 | 位数不足时，后补“0X00”。
    Word province_id;                 ///< 省域id
    Word city_id;                     ///< 市县域id
    Byte mid[5];                      ///< 制造商id
    Byte term_type[20];               ///< 终端型号 | 20个字节，此终端型号由制造商自行定义，位数不足时，后补“0X00”。
    Byte term_id[7];                  ///< 终端id | 7个字节，由大写字母和数字组成，此终端id由制造商自行定义为不重复的标识，位数不足时，后补“0X00”
    Byte vehicle_color;               ///< 车牌颜色 | 未上牌时，取值为0。
    Byte vehicle_num[9];              ///< 车牌号码 | 公安交通管理部门颁发的机动车号牌，位数不足时，后补“0X00”。
    TMfString vehicle_vin;            ///< 车辆VIN号 | 车辆VIN，以“0X00”结束。

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808AccountRegisterCreate(TJtMsg808AccountRegister *self);

/**
 * 位置信息汇报(0x0200)
 ******************************************************************************
 */
typedef struct TJtMsg808LocationTag TJtMsg808Location;
struct TJtMsg808LocationTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    TJtMsg808LocationGpsItem gps_item;  ///< 标准28字节位置信息
    TMfString items_data;               ///< 附加信息 | 
    //TOfIndefineList items;              

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808LocationCreate(TJtMsg808Location *self);

/**
 * 位置信息查询(0x8201)
 ******************************************************************************
 */
typedef struct TJtMsg808GetLocationTag TJtMsg808GetLocation;
struct TJtMsg808GetLocationTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808GetLocationCreate(TJtMsg808GetLocation *self);

/**
 * 位置信息查询应答(0x0201)
 ******************************************************************************
 */
typedef struct TJtMsg808GetLocationRespTag TJtMsg808GetLocationResp;
struct TJtMsg808GetLocationRespTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
    
PUBLIC
    Word resp_seq_id;                   ///< 应答流水号 | 对应的位置信息查询消息的流水号
    TJtMsg808LocationGpsItem gps_item;  ///< 标准28字节位置信息
    TOfIndefineList items;              ///< 附加信息 | 

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808GetLocationRespCreate(TJtMsg808GetLocationResp *self);

/**
 * 临时位置跟踪控制(0x8202)
 ******************************************************************************
 */
typedef struct TJtMsg808LocationTraceTag TJtMsg808LocationTrace;
struct TJtMsg808LocationTraceTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Word interval;                    ///< 时间间隔 | 单位为秒（s），0则停止跟踪。停止跟踪无需带后继字段

    //// 位置跟踪有效期 | 单位为秒（s），终端在接收到位置跟踪控制消息后，在有效期截止时间之前，依据消息中的时间间隔发送位置汇报
    DWord lot_time;                    

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808LocationTraceCreate(TJtMsg808LocationTrace *self);



/**
 * 人工确认报警消息(0x8203)
 ******************************************************************************
 */
typedef struct TJtMsg808ManualConfAlarmTag TJtMsg808ManualConfAlarm;
struct TJtMsg808ManualConfAlarmTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Word alarm_seq_id;                ///< 报警消息流水号 | 需人工确认的报警消息流水号，0 表示该报警类型所有消息
    DWord type;                       ///< 人工确认报警类型 | 定义见表36

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808ManualConfAlarmCreate(TJtMsg808ManualConfAlarm *self);

/**
 * 文本信息下发(0x8300)
 ******************************************************************************
 */
typedef struct TJtMsg808TextMsgTag TJtMsg808TextMsg;
struct TJtMsg808TextMsgTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte flag;                        ///< 标志 | 文本信息标志位含义见表7-25
    TMfString text_msg;               ///< 文本信息 | 最长为1024字节，经GBK编码

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808TextMsgCreate(TJtMsg808TextMsg *self);

/**
 * 事件设置(0x8301)
 ******************************************************************************
 */
typedef struct TJtMsg808EventSetTag TJtMsg808EventSet;
struct TJtMsg808EventSetTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte type;                        ///< 设置类型 | 参考TJtMsg808EventSetTypeEnum
    TOfIndefineList items;            ///< 事件项列表 | 事件项组成数据格式见表7-27

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808EventSetCreate(TJtMsg808EventSet *self);

/**
 * 事件报告(0x0301)
 ******************************************************************************
 */
typedef struct TJtMsg808EventReportTag TJtMsg808EventReport;
struct TJtMsg808EventReportTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte event_id;                    ///< 事件id | 

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808EventReportCreate(TJtMsg808EventReport *self);

/**
 * 制造TJtMsg808EventReport消息,内部会调用构造函数,指针通过TJtMsg808FreeMsg释放
 * @param 
 * @return 消息指针,需要通过OfFreeObject释放
 */
TJtMsg808EventReport *JtMakeMsg808EventReport(Byte event_id);

/**
 * 提问下发(0x8302)
 ******************************************************************************
 */
typedef struct TJtMsg808QuestionTag TJtMsg808Question;
struct TJtMsg808QuestionTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte flag;                        ///< 标志 | 提问下发标志位定义见表7-30
    TMfString question;               ///< 问题 | 问题文本，经GBK编码，长度为N
    TOfIndefineList items;            ///< 候选答案列表 | 候选答案消息组成见表7-31
PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808QuestionCreate(TJtMsg808Question *self);


/**
 * 提问应答(0x0302)
 ******************************************************************************
 */
typedef struct TJtMsg808QuestionRespTag TJtMsg808QuestionResp;
struct TJtMsg808QuestionRespTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Word resp_seq_id;                 ///< 应答流水号 | 对应的提问下发消息的流水号
    Byte answer_id;                   ///< 答案id | 提问下发中附带的答案id

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808QuestionRespCreate(TJtMsg808QuestionResp *self);

/**
 * 制造TJtMsg808QuestionResp消息,内部会调用构造函数,指针通过TJtMsg808FreeMsg释放
 * @param 
 * @return 消息指针,需要通过OfFreeObject释放
 */
TJtMsg808QuestionResp *JtMakeMsg808QuestionResp(Word resp_seq_id, Byte answer_id);

/**
 * 信息点播菜单设置(0x8303)
 ******************************************************************************
 */
typedef struct TJtMsg808MsgReqMenuSetTag TJtMsg808MsgReqMenuSet;
struct TJtMsg808MsgReqMenuSetTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte type;                        ///< 设置类型 | 0：删除终端全部信息项；1：更新菜单；2：追加菜单；3：修改菜单
    TOfIndefineList items;            ///< 信息项列表 | 信息点播信息项组成数据格式见表7-34

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808MsgReqMenuSetCreate(TJtMsg808MsgReqMenuSet *self);

/**
 * 信息点播/取消(0x0303)
 ******************************************************************************
 */
typedef struct TJtMsg808MsgRequestTag TJtMsg808MsgRequest;
struct TJtMsg808MsgRequestTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte msg_type;                    ///< 信息类型 | 
    Byte action;                      ///< 点播/取消标志 | 0：取消；1：点播

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808MsgRequestCreate(TJtMsg808MsgRequest *self);

/**
 * 制造TJtMsg808MsgRequest消息,内部会调用构造函数,指针通过TJtMsg808FreeMsg释放
 * @param 
 * @return 消息指针,需要通过OfFreeObject释放
 */
TJtMsg808MsgRequest *JtMakeMsg808MsgRequest(Byte msg_type, Byte action);

/**
 * 信息服务(0x8304)
 ******************************************************************************
 */
typedef struct TJtMsg808MsgServiceTag TJtMsg808MsgService;
struct TJtMsg808MsgServiceTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte type;                        ///< 信息类型 | 
    TMfString content;                ///< 信息内容 | 经GBK 编码

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808MsgServiceCreate(TJtMsg808MsgService *self);

/**
 * 电话回拨(0x8400)
 ******************************************************************************
 */
typedef struct TJtMsg808PhoneCallBackTag TJtMsg808PhoneCallBack;
struct TJtMsg808PhoneCallBackTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte flag;                        ///< 标志 | 0:普通通话；1:监听
    TMfString phone_no;               ///< 电话号码 | 最长为20字节

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808PhoneCallBackCreate(TJtMsg808PhoneCallBack *self);


typedef struct TJtMsg808SetAddrBookItemTag TJtMsg808SetAddrBookItem;
struct TJtMsg808SetAddrBookItemTag
{
    Byte flag;                      ///< 标志 | 1:呼入 | 2:呼出 | 3:呼入/呼出
    Byte phone_num_len;             ///< 电话号码长度
    char phone_num[256];            ///< 电话号码
    Byte liaisons_len;              ///< 联系人长度
    char liaisons[256];             ///< 联系人 | 经GBK编码
};

/**
 * 设置电话本(0x8401)
 ******************************************************************************
 */
typedef struct TJtMsg808SetAddrBookTag TJtMsg808SetAddrBook;
struct TJtMsg808SetAddrBookTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte type;                        ///< 设置类型 | 0：删除终端上所有存储的联系人；1：表示更新电话本（删除终端中已有全部联系人并追加消息中的联系人）；2：表示追加电话本；3：表示修改电话本（以联系人为索引）
    Byte count;                       ///< 联系人总数 | 
    TOfIndefineList items;            ///< 联系人项 | 电话本联系人项数据格式见表7-39
PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808SetAddrBookCreate(TJtMsg808SetAddrBook *self);

/**
 * 车辆控制(0x8500)
 ******************************************************************************
 */
typedef struct TJtMsg808VehicleCtrlTag TJtMsg808VehicleCtrl;
struct TJtMsg808VehicleCtrlTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte flag;                        ///< 控 制 标 志 | 控 制 指 令 标 志 位 数 据 格 式 见 表7-41

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808VehicleCtrlCreate(TJtMsg808VehicleCtrl *self);

/**
 * 车辆控制应答(0x0500)
 ******************************************************************************
 */
typedef struct TJtMsg808VehicleCtrlRespTag TJtMsg808VehicleCtrlResp;
struct TJtMsg808VehicleCtrlRespTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Word resp_seq_id;                 ///< 应答流水号 | 对应的车辆控制消息的流水号
    TJtMsg808LocationGpsItem gps_item;
    TOfIndefineList items;             ///< 附加信息 | 

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808VehicleCtrlRespCreate(TJtMsg808VehicleCtrlResp *self);

/**
 * 设置圆形区域(0x8600)
 ******************************************************************************
 */
typedef struct TJtMsg808SetCircleZoneTag TJtMsg808SetCircleZone;
struct TJtMsg808SetCircleZoneTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte action;                      ///< 设置属性 | 0：更新区域 | 1：追加区域 | 2：修改区域
    TOfIndefineList items;            ///< 区域项 | 圆形区域的区域项内容数据格式见表8-47,存储TJtMsg808CircleZoneTerm

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808SetCircleZoneCreate(TJtMsg808SetCircleZone *self);

/**
 * 删除圆形区域(0x8601)
 ******************************************************************************
 */
typedef struct TJtMsg808DelCircleZoneTag TJtMsg808DelCircleZone;
struct TJtMsg808DelCircleZoneTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte count;                       ///< 区域数 | 本条消息中包含的区域数，不超过125个，多于125个建议用多条消息，0为删除所有圆形区域
    DWord ids[256];                   ///< 区域ID1 | 

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808DelCircleZoneCreate(TJtMsg808DelCircleZone *self);

/**
 * 设置矩形区域(0x8602)
 ******************************************************************************
 */
typedef struct TJtMsg808SetRectZoneTag TJtMsg808SetRectZone;
struct TJtMsg808SetRectZoneTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte action;                      ///< 设置属性 | 0 ：更新区域；
    TOfIndefineList items;            ///< 区 域项 | 矩形区域的区域项数据格式见表7-48，存储TJtMsg808RectZoneTerm

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808SetRectZoneCreate(TJtMsg808SetRectZone *self);

/**
 * 删除矩形区域(0x8603)
 ******************************************************************************
 */
typedef struct TJtMsg808DelRectZoneTag TJtMsg808DelRectZone;
struct TJtMsg808DelRectZoneTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte count;                       ///< 区域数 | 本条消息中包含的区域数，不超过125个，多于125个建议用多条消息，0为删除所有矩形区域
    DWord ids[256];                   ///< 区域ID1 | 

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808DelRectZoneCreate(TJtMsg808DelRectZone *self);

/**
 * 设置多边形区域(0x8604)
 ******************************************************************************
 */
typedef struct TJtMsg808SetPolygonZoneTag TJtMsg808SetPolygonZone;
struct TJtMsg808SetPolygonZoneTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    DWord zone_id;                    ///< 区域id | 
    Word zone_attr;                   ///< 区域属性 | 区域属性定义见表7-45
    Byte begin_time[6];               ///< 起始时间 | 同圆形区域中时间范围设定
    Byte end_time[6];                 ///< 结束时间 | 同圆形区域中时间范围设定
    Word max_speed;                   ///< 最高速度 | 单位为公里每小时（km/h），若区域属性1位为0则没有该字段
    Byte lasting_time;                ///< 超速持续时间 | 单位为秒（s），若区域属性1位为0则没有该字段
    Word count;                       ///< 区域总顶点数 | 
    TOfIndefineList items;            ///< 顶点项 | 多边形区域的顶点项数据格式见表7-51，存储TJtMsg808PolygonPeakTerm

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808SetPolygonZoneCreate(TJtMsg808SetPolygonZone *self);

/**
 * 删除多边形区域(0x8605)
 ******************************************************************************
 */
typedef struct TJtMsg808DelPolygonZoneTag TJtMsg808DelPolygonZone;
struct TJtMsg808DelPolygonZoneTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte count;                       ///< 区域数 | 本条消息中包含的区域数，不超过125个，多于125个建议用多条消息，0为删除所有矩形区域
    DWord ids[256];                   ///< 区域ID1 | 

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808DelPolygonZoneCreate(TJtMsg808DelPolygonZone *self);



/**
 * 设置路线(0x8606)
 ******************************************************************************
 */
typedef struct TJtMsg808SetLineTag TJtMsg808SetLine;
struct TJtMsg808SetLineTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    DWord line_id;                    ///< 路线id | 
    Word line_attr;                   ///< 路线属性 | 路线属性数据格式见表7-54
    Byte begin_time[6];               ///< 起始时间 | 同圆形区域中时间范围设定
    Byte end_time[6];                 ///< 结束时间 | 同圆形区域中时间范围设定
    Word count;                       ///< 路线总拐点数 | 
    TOfIndefineList items;            ///< 拐点项 | 路线拐点项数据格式见表7-55，存储TJtMsg808LineInflexionTerm


PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808SetLineCreate(TJtMsg808SetLine *self);

/**
 * 删除路线(0x8607)
 ******************************************************************************
 */
typedef struct TJtMsg808DelLineTag TJtMsg808DelLine;
struct TJtMsg808DelLineTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte count;                       ///< 路线数 | 本条消息中包含的区域数，不超过125个，多于125个建议用多条消息，0为删除所有路线
    DWord ids[256];                   ///< 路线ID1 | 

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808DelLineCreate(TJtMsg808DelLine *self);

/**
 * 行驶记录数据采集命令(0x8700)
 ******************************************************************************
 */
typedef struct TJtMsg808GetVtdrDataTag TJtMsg808GetVtdrData;
struct TJtMsg808GetVtdrDataTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte cmd;                         ///< 命令字 | 命令字列表见GB/T19056中相关要求
    TMfString data;                   ///< 数据块 | 数据块内容格式见GB/T 19056 中相关内容，包含GB/T 19056 要求的完整数据包，可为空。

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808GetVtdrDataCreate(TJtMsg808GetVtdrData *self);

/**
 * 行驶记录数据上传(0x0700)
 ******************************************************************************
 */
typedef struct TJtMsg808GetVtdrDataRespTag TJtMsg808GetVtdrDataResp;
struct TJtMsg808GetVtdrDataRespTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Word resp_seq_id;                 ///< 应答流水号 | 对应的行驶记录数据采集命令消息的流水号
    Byte cmd;                         ///< 命令字 | 对应平台发出的命令字
    TMfString data;                   ///< 数据块 | 数据块内容格式见GB/T19056中相关内容， 包含GB/T 19056 要求的完整数据包。

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808GetVtdrDataRespCreate(TJtMsg808GetVtdrDataResp *self);

/**
 * 上报驾驶员身份信息请求(0x8702)
 ******************************************************************************
 */
typedef struct TJtMsg808GetDriverTag TJtMsg808GetDriver;
struct TJtMsg808GetDriverTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808GetDriverCreate(TJtMsg808GetDriver *self);

/**
 * 行驶记录参数下传命令(0x8701)
 ******************************************************************************
 */
typedef struct TJtMsg808SetVtdrParamTag TJtMsg808SetVtdrParam;
struct TJtMsg808SetVtdrParamTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte cmd;                         ///< 命令字 | 命令字列表见GB/T19056中相关要求
    TMfString data;                   ///< 数据块 | 数据块内容格式见GB/T19056中相关内容，包含GB/T 19056 要求的完整数据包。

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808SetVtdrParamCreate(TJtMsg808SetVtdrParam *self);

/**
 * 电子运单上报(0x0701)
 ******************************************************************************
 */
typedef struct TJtMsg808GetEBillTag TJtMsg808GetEBill;
struct TJtMsg808GetEBillTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    TMfString content;                ///< 电子运单内容 | 电子运单数据包

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808GetEBillCreate(TJtMsg808GetEBill *self);

/**
 * 制造TJtMsg808GetEBill消息,内部会调用构造函数,指针通过TJtMsg808FreeMsg释放
 * @param 
 * @return 消息指针,需要通过OfFreeObject释放
 */
TJtMsg808GetEBill *JtMakeMsg808GetEBill(const char *content, Int32 content_len);

/**
 * 驾驶员身份信息采集上报(0x0702)
 ******************************************************************************
 */
typedef struct TJtMsg808GetDriverRespTag TJtMsg808GetDriverResp;
struct TJtMsg808GetDriverRespTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte state;                       ///< 状态 | 0x01：从业资格证IC 卡插入（驾驶员上班）；0x02：从业资格证IC 卡拔出（驾驶员下班）。
    Byte time[6];                     ///< 时间 | 插卡/拔卡时间，YY-MM-DD-hh-mm-ss；以下字段在状态为0x01 时才有效并做填充。
    Byte read_result;                 ///< IC 卡读取结果 | 0x00：IC 卡读卡成功；0x01：读卡失败，原因为卡片密钥认证未通过；0x02：读卡失败，原因为卡片已被锁定；0x03：读卡失败，原因为卡片被拔出；0x04：读卡失败，原因为数据校验错误。以下字段在IC 卡读取结果等于0x00 时才有效。
    TMfString name;                   ///< 驾驶员姓名 | 驾驶员姓名，长度n
    Byte pass_code[20];               ///< 从业资格证编码 | 长度20位，不足补0x00
    TMfString gov_dept;               ///< 发证机构名称 | 从业资格证发证机构名称
    Byte lot_date[4];                 ///< 证件有效期 | YYYYMMDD

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808GetDriverRespCreate(TJtMsg808GetDriverResp *self);

/**
 * 定位数据批量上传(0x0704)
 ******************************************************************************
 */
typedef struct TJtMsg808LocationBatchTag TJtMsg808LocationBatch;
struct TJtMsg808LocationBatchTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Word count;                       ///< 数据项个数 | 包含的位置汇报数据项个数，>0
    Byte type;                        ///< 位置数据类型 | 0：正常位置批量汇报，1：盲区补报
    TOfIndefineList items;            ///< 位置汇报数据项 | 定义见表8-72

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808LocationBatchCreate(TJtMsg808LocationBatch *self);

/**
 * Can总线数据上传(0x0705)
 ******************************************************************************
 */
typedef struct TJtMsg808CanDataTag TJtMsg808CanData;
struct TJtMsg808CanDataTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte time[5];                      ///< CAN 总线数据接收时间 | 第1 条CAN 总线数据的接收时间，h-mm-ss-ms
    TOfIndefineList items;             ///< CAN 总线数据项 | 定义见表8-74

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808CanDataCreate(TJtMsg808CanData *self);

/**
 * 多媒体事件信息上传(0x0800)
 ******************************************************************************
 */
typedef struct TJtMsg808MediaEventTag TJtMsg808MediaEvent;
struct TJtMsg808MediaEventTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    DWord mmid;                       ///< 多媒体数据id | >0
    Byte type;                        ///< 多媒体类型 | 0：图像；1：音频；2：视频；
    Byte format_id;                   ///< 多媒体格式编码 | 0：JPEG；1：TIF；2：MP3；3：WAV；4：WMV；
    Byte code;                        ///< 事件项编码 | 0：平台下发指令；1：定时动作；2：抢劫报警触发；3：碰撞侧翻报警触发；4：门开拍照；5：门关拍照；6：车门由开变关，时速从＜20 公里到超过20 公里；7：定距拍照；
    Byte channel_id;                  ///< 通道id | 

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808MediaEventCreate(TJtMsg808MediaEvent *self);

/**
 * 制造TJtMsg808MediaEvent消息,内部会调用构造函数,指针通过TJtMsg808FreeMsg释放
 * @param 
 * @return 消息指针,需要通过OfFreeObject释放
 */
TJtMsg808MediaEvent *JtMakeMsg808MediaEvent(DWord mmid, Byte type, Byte format_id, Byte code, Byte channel_id);


/**
 * 多媒体数据上传(0x0801)
 ******************************************************************************
 */
typedef struct TJtMsg808MediaDataTag TJtMsg808MediaData;
struct TJtMsg808MediaDataTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    DWord mmid;                       ///< 多媒体id | >0
    Byte type;                        ///< 多媒体类型 | 0：图像；1：音频；2：视频；
    Byte format_id;                   ///< 多媒体格式编码 | 0：JPEG；1：TIF；2：MP3；3：WAV；4：WMV；
    Byte code;                        ///< 事件项编码 | 0：平台下发指令；1：定时动作；2：抢劫报警触发；3：碰撞侧翻报警触发；其他保留
    Byte channel_id;                  ///< 通道id | 
    TJtMsg808LocationGpsItem gps_item;    ///< gps固定28字节

    TMfString data;                   ///< 多媒体数据包 | 
PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808MediaDataCreate(TJtMsg808MediaData *self);

/**
 * 多媒体数据上传应答(0x8800)
 ******************************************************************************
 */
typedef struct TJtMsg808MediaDataRespTag TJtMsg808MediaDataResp;
struct TJtMsg808MediaDataRespTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    DWord mmid;                       ///< 多媒体id | >0，如收到全部数据包则没有后续字段
    Byte count;                       ///< 重传包总数 | N
    Word ids[256];                    ///< 重传包id列表 | 重传包序号顺序排列，如"包ID1 包ID2......包IDn"

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808MediaDataRespCreate(TJtMsg808MediaDataResp *self);

/**
 * 摄像头立即拍摄命令(0x8801)
 ******************************************************************************
 */
typedef struct TJtMsg808CameraSnapTag TJtMsg808CameraSnap;
struct TJtMsg808CameraSnapTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte channel_id;                  ///< 通道id | >0
    Word cmd;                         ///< 拍摄命令 | 0表示停止拍摄；0xFFFF表示录像；其它表示拍照张数
    Word time;                        ///< 拍照间隔/录像时间 | 秒，0表示按最小间隔拍照或一直录像
    Byte save_flag;                   ///< 保存标志 | 1：保存；0：实时上传
    Byte resolution;                  ///< 分辨率a | 0x01:320*240；0x02:640*480；0x03:800*600；0x04:1024*768;0x05:176*144;[Qcif];0x06:352*288;[Cif];0x07:704*288;[HALF D1];0x08:704*576;[D1];
    Byte quality;                     ///< 图像/视频质量 | 1～10，1代表质量损失最小，10表示压缩比最大
    Byte brightness;                  ///< 亮度 | 0～255
    Byte contrast;                    ///< 对比度 | 0～127
    Byte saturation;                  ///< 饱和度 | 0～127
    Byte chroma;                      ///< 色度 | 0～255

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808CameraSnapCreate(TJtMsg808CameraSnap *self);

/**
 * 存储多媒体数据检索(0x8802)
 ******************************************************************************
 */
typedef struct TJtMsg808MediaQueryTag TJtMsg808MediaQuery;
struct TJtMsg808MediaQueryTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    TJtMsg808MediaQueryItem query_item;

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808MediaQueryCreate(TJtMsg808MediaQuery *self);


/**
 * 存储多媒体数据检索应答(0x0802)
 ******************************************************************************
 */
typedef struct TJtMsg808MediaQueryRespTag TJtMsg808MediaQueryResp;
struct TJtMsg808MediaQueryRespTag
{
    TJtMsg808 parent_;                ///< 基类
    

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Word resp_seq_id;                     ///< 应答流水号 | 对应的多媒体数据检索消息的流水号

PRIVATE
    TOfIndefineList items_;             ///< 数据每一项指向TJtMsg808MediaQueryRespItem指针
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808MediaQueryRespCreate(TJtMsg808MediaQueryResp *self);

/**
 * 增加一项检索项
 * @param self: 对象指针
 * @return 检索项,内容需要外部赋值
 */
TJtMsg808MediaQueryRespItem *TJtMsg808MediaQueryRespAdd(TJtMsg808MediaQueryResp *self);

/**
 * 存储多媒体数据上传命令(0x8803)
 ******************************************************************************
 */
typedef struct TJtMsg808MediaStoreDataTag TJtMsg808MediaStoreData;
struct TJtMsg808MediaStoreDataTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte type;                        ///< 多媒体类型 | 0：图像；1：音频；2：视频
    Byte channel_id;                  ///< 通道id | 
    Byte code;                        ///< 事件项编码 | 0：平台下发指令；1：定时动作；2：抢劫报警触发；3：碰撞侧翻报警触发；其他保留
    Byte begin_time[6];               ///< 起始时间 | YY-MM-DD-hh-mm-ss
    Byte end_time[6];                 ///< 结束时间 | YY-MM-DD-hh-mm-ss
    Byte del_flag;                    ///< 删除标志 | 0：保留；1：删除；

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808MediaStoreDataCreate(TJtMsg808MediaStoreData *self);

/**
 * 录音开始命令(0x8804)
 ******************************************************************************
 */
typedef struct TJtMsg808StartRecordTag TJtMsg808StartRecord;
struct TJtMsg808StartRecordTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte cmd;                         ///< 录音命令 | 0：停止录音；0x01：开始录音；
    Word time;                        ///< 录音时间 | 单位为秒（s），0表示一直录音
    Byte save_flag;                   ///< 保存标志 | 0：实时上传；1：保存
    Byte sample_rate;                 ///< 音频采样率 | 0：8K；1：11K；2：23K；3：32K；其他保留

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808StartRecordCreate(TJtMsg808StartRecord *self);


/**
 * 摄像头立即拍摄命令应答(0x0805)
 ******************************************************************************
 */
typedef struct TJtMsg808CameraSnapRespTag TJtMsg808CameraSnapResp;
struct TJtMsg808CameraSnapRespTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Word resp_seq_id;                 ///< 应答流水号 | 对应平台摄像头立即拍摄命令的消息流水号
    Byte snap_result;                 ///< 结果 | 0：成功；1：失败；2：通道不支持。以下字段在结果=0 时才有效
    Word count;                       ///< 多媒体id 个数 | n，拍摄成功的多媒体个数
    DWord ids[200];                   ///< 多媒体id 列表 | 

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808CameraSnapRespCreate(TJtMsg808CameraSnapResp *self);

/**
 * 制造TJtMsg808CameraSnapResp消息,内部会调用构造函数,指针通过TJtMsg808FreeMsg释放
 * @param resp_seq_id: 应答流水号
 * @param snap_result: 抓拍结果,参考TJtMsg808CameraSnapResultEnum
 * @param ids: 多媒体ID 列表
 * @param count: 多媒体ID 个数
 * @return 消息指针,需要通过OfFreeObject释放
 */
TJtMsg808CameraSnapResp *JtMakeMsg808CameraSnapResp(Word resp_seq_id, Byte snap_result, const DWord *ids, Word count);


/**
 * 单条多媒体数据检索上传(0x8805)
 ******************************************************************************
 */
typedef struct TJtMsg808MediaQueryOneTag TJtMsg808MediaQueryOne;
struct TJtMsg808MediaQueryOneTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    DWord mmid;                       ///< 多媒体id | >0
    Byte del_flag;                    ///< 删除标志 | 0:保留; 1:删除;

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808MediaQueryOneCreate(TJtMsg808MediaQueryOne *self);

/**
 * 数据下行透传 0x8900
 ******************************************************************************
 */
typedef struct TJtMsg808DownloadByPassTag TJtMsg808DownloadByPass;
struct TJtMsg808DownloadByPassTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte type;                        ///< 透传消息类型 | 透传消息类型定义见表93
    TMfString data;                   ///< 透传消息内容

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808DownloadByPassCreate(TJtMsg808DownloadByPass *self);

/**
 * 数据上行透传(0x0900)
 ******************************************************************************
 */
typedef struct TJtMsg808UploadByPassTag TJtMsg808UploadByPass;
struct TJtMsg808UploadByPassTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    Byte type;                        ///< 透传消息类型 | 透传消息类型定义见表93
    TMfString data;                   ///< 透传消息内容

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808UploadByPassCreate(TJtMsg808UploadByPass *self);

/**
 * 制造TJtMsg808UploadByPass消息,内部会调用构造函数,指针通过TJtMsg808FreeMsg释放
 * @param 
 * @return 消息指针,需要通过OfFreeObject释放
 */
TJtMsg808UploadByPass *JtMakeMsg808UploadByPass(Byte type, const char *data, Int32 data_len);

/**
 * 数据压缩上报(0x0901)
 ******************************************************************************
 */
typedef struct TJtMsg808CompressDataTag TJtMsg808CompressData;
struct TJtMsg808CompressDataTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    DWord size;                       ///< 压缩消息长度 | 
    TMfString data;                   ///< 压缩消息体 | 压缩消息体为需要压缩的消息经过GZIP压缩算法后的消息

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808CompressDataCreate(TJtMsg808CompressData *self);

/**
 * 制造TJtMsg808CompressData消息,内部会调用构造函数,指针通过TJtMsg808FreeMsg释放
 * @param 
 * @return 消息指针,需要通过OfFreeObject释放
 */
TJtMsg808CompressData *JtMakeMsg808CompressData(DWord size, const char *data, Int32 data_len);


/**
 * 平台RSA公钥(0x8A00)
 ******************************************************************************
 */
typedef struct TJtMsg808PtmRsaPubKeyTag TJtMsg808PtmRsaPubKey;
struct TJtMsg808PtmRsaPubKeyTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    DWord e;                          ///< e | 平台RSA公钥{e,n}中的e
    Byte n[128];                      ///< n | RSA公钥{e,n}中的n

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808PtmRsaPubKeyCreate(TJtMsg808PtmRsaPubKey *self);

/**
 * 终端RSA公钥(0x0A00)
 ******************************************************************************
 */
typedef struct TJtMsg808TrmRsaPubKeyTag TJtMsg808TrmRsaPubKey;
struct TJtMsg808TrmRsaPubKeyTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    DWord e;                          ///< e | 终端RSA公钥{e,n}中的e
    Byte n[128];                      ///< n | RSA公钥{e,n}中的n

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808TrmRsaPubKeyCreate(TJtMsg808TrmRsaPubKey *self);

/**
 * 星历请求下载(0x0FD4)
 ******************************************************************************
 */
typedef struct TJtMsg808ObosAgnssTag TJtMsg808ObosAgnss;
struct TJtMsg808ObosAgnssTag
{
    TJtMsg808 parent_;                ///< 基类

PROTECTED
    TOfVirtualMethod Destroy_;        ///< 析构事件
    
PUBLIC
    UInt8       download_control;                 ///< 下载请求控制命令
    UInt8       eph_version_length;               ///< 星历版本长度
    Byte        eph_version[32];                  ///< 星历版本--暂定32
    UInt8       reserves_info_length;             ///< 预留信息长度
    Byte        reserves_info[64];                ///< 预留信息--暂定64

PRIVATE
    
};

/**
 * 构造函数
 * @param self: 对象指针
 * @return True: 成功; False: 失败
 */
Bool TJtMsg808GetAgnssEphCreate(TJtMsg808ObosAgnss *self);

#ifdef __cplusplus
} // extern "C" {
#endif
#endif
/**
 * @} 
 */

